// 2597. 美丽子集的数目
// 提示
// 中等
// 36
// 相关企业
// 给你一个由正整数组成的数组 nums 和一个 正 整数 k 。

// 如果 nums 的子集中，任意两个整数的绝对差均不等于 k ，则认为该子数组是一个 美丽 子集。

// 返回数组 nums 中 非空 且 美丽 的子集数目。

// nums 的子集定义为：可以经由 nums 删除某些元素（也可能不删除）得到的一个数组。只有在删除元素时选择的索引不同的情况下，两个子集才会被视作是不同的子集。



// 示例 1：

// 输入：nums = [2, 4, 6,8], k = 2
// 输出：4
// 解释：数组 nums 中的美丽子集有：[2], [4], [6], [2, 6] 。
// 可以证明数组[2, 4, 6] 中只存在 4 个美丽子集。
// 示例 2：

// 输入：nums = [1], k = 1
// 输出：1
// 解释：数组 nums 中的美丽数组有：[1] 。

function beautifulSubsets(nums, k) {
    const hash = new Array(nums.length).fill(0).map(() => new Array(nums.length).fill(0))
    // console.log(hash);
    for (let i = 0; i < nums.length; i++) {
        for (let j = i + 1; j < nums.length; j++) {
            if (Math.abs(nums[j] - nums[i]) === k) hash[i][j] = 1;
        }
    }
    // console.log(hash);
    let queue = nums.map((v, i) => [i]), ans = 0;
    while (queue.length) {
        const next = [];
        for (const q of queue) {
            ans++;
            for (let j = q.at(-1) + 1; j < nums.length; j++) {
                if (q.every((i) => !hash[i][j])) next.push([...q, j]);
            }
        }
        queue = next;
    }
    // console.log(hash);
    return ans;
};

beautifulSubsets([2, 4, 6], 2)

// var beautifulSubsets = function (nums, k) {
//     var sunNum = 0
//     var levelNum = k
//     function generateSubsets(arr, index = 0, currentSubset = [], allSubsets = []) {
//         if (index === arr.length) {
//             allSubsets.push(currentSubset.slice()); // 将当前子集添加到结果数组
//             return;
//         }

//         // 包含当前元素的子集
//         currentSubset.push(arr[index]);
//         generateSubsets(arr, index + 1, currentSubset, allSubsets);

//         // 不包含当前元素的子集
//         currentSubset.pop();
//         generateSubsets(arr, index + 1, currentSubset, allSubsets);

//         return allSubsets;
//     }

//     let arrList = generateSubsets(nums)
//     console.log(arrList);
//     outLine: for (i = 0; i < arrList.length; i++) {
//         for (j = 0; j < arrList[i].length; j++) {
//             for (f = 1; f < arrList[i].length - j; f++) {
//                 if (arrList[i][j + f] - arrList[i][j] === levelNum) {
//                     console.log(arrList[i][j + f] - arrList[i][j]);
//                     break outLine
//                 }
//             }
//         }
//         sunNum++
//     }
//     return sunNum
// };
// console.log(beautifulSubsets([2, 4, 6], 2));


// function generateSubsets(arr, index = 0, currentSubset = [], allSubsets = []) {
//     if (index === arr.length) {
//         allSubsets.push(currentSubset.slice()); // 将当前子集添加到结果数组
//         return;
//     }

//     // 包含当前元素的子集
//     currentSubset.push(arr[index]);
//     generateSubsets(arr, index + 1, currentSubset, allSubsets);

//     // 不包含当前元素的子集
//     currentSubset.pop();
//     generateSubsets(arr, index + 1, currentSubset, allSubsets);

//     return allSubsets;
// }

// const arr = [1, 2, 3];
// const subsets = generateSubsets(arr);
// console.log(subsets);

// function generateSubsets(arr) {
//     const subsets = [[]];

//     for (const num of arr) {
//         const newSubsets = [];

//         for (const subset of subsets) {
//             newSubsets.push(subset.concat(num));
//         }

//         subsets.push(...newSubsets);
//     }

//     return subsets;
// }

// const arr1 = [1, 2, 3];
// const subsets1 = generateSubsets(arr);
// console.log(subsets1);
